home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-12-24 | 3.7 KB | 188 lines | [TEXT/PJMM] |
- unit InputAMatrix;
-
-
- interface
-
-
- uses
-
- Globals, Commands, Eval;
-
-
- procedure InputAMatrix (var savename: stringsize; var kmat: longint; var mrows, ncols: longint; var randommod: longint; var randommatrix: boolean);
-
-
- implementation
-
- procedure InputAMatrix;
-
- label
- 998, 999;
-
- type
-
- matrixnamearray = array[1..maxnumberofstrings] of hdlstringsize;
- ptrmatrixnamearray = ^matrixnamearray;
- hdlmatrixnamearray = ^ptrmatrixnamearray;
-
- cntarray = array[1..200] of longint;
- ptrcntarray = ^cntarray;
- hdlcntarray = ^ptrcntarray;
-
-
- var
- rows, cols, y: extended;
- mdresult, mdline, name, dummyfilename: str255;
- i, j, k, randomlongint: longint;
- matrixelement: hdlmatrixnamearray;
- matrixdummy: hdlsinglearraymatrix;
- vRefNum: integer;
- err: OSErr;
- fileinfo: fInfo;
-
- begin
-
- rows := mrows;
- cols := ncols;
-
- if randommatrix then
- begin
- createamatrix(savename, mrows, ncols, kmat);
-
- if matrixstoredinfile^^[kmat] then
- begin
- if not mfileopen^^[kmat] then
- begin
- open(matfile^^[kmat]^^, strvar^^[kmat]^^);
- mfileopen^^[kmat] := true;
- end;
- rewrite(matfile^^[kmat]^^);
- write(matfile^^[kmat]^^, rows);
- write(matfile^^[kmat]^^, cols);
- end
- else
- begin
- storematrix^^[kmat]^^[1] := rows;
- storematrix^^[kmat]^^[2] := cols;
- end;
-
- i := 0;
- for j := 1 to mrows do
- for k := 1 to ncols do
- begin
- i := i + 1;
- randomlongint := random mod randommod;
- y := randomlongint;
- if matrixstoredinfile^^[kmat] then
- write(matfile^^[kmat]^^, y)
- else
- storematrix^^[kmat]^^[i + 2] := y;
- end;
- if matrixstoredinfile^^[kmat] then
- if mfileopen^^[kmat] then
- begin
- close(matfile^^[kmat]^^);
- mfileopen^^[kmat] := false;
- end;
- goto 999;
- end;
-
- dummyfilename := 'dummyfile';
-
- if not dummyopen then
- begin
- open(dummyfile, dummyfilename);
- dummyopen := true;
- end;
-
- rewrite(dummyfile);
-
- matrixelement := hdlmatrixnamearray(NewHandle(SizeOf(matrixnamearray)));
-
- k := 0;
- for i := 1 to mrows do
- begin
- writeln('row ', i : 3);
- for j := 1 to ncols do
- begin
- k := k + 1;
- write(blank);
- readln(mdline);
- writeln(dummyfile, mdline);
- matrixelement^^[k] := hdlstringsize(NewHandle(SizeOf(stringsize)));
- matrixelement^^[k]^^ := mdline;
- end;
- end;
-
- reset(dummyfile);
-
- createamatrix(savename, mrows, ncols, kmat);
-
- if matrixstoredinfile^^[kmat] then
- begin
- if not mfileopen^^[kmat] then
- begin
- open(matfile^^[kmat]^^, strvar^^[kmat]^^);
- mfileopen^^[kmat] := true;
- end;
- rewrite(matfile^^[kmat]^^);
- y := rows;
- write(matfile^^[kmat]^^, y);
- y := cols;
- write(matfile^^[kmat]^^, y);
- end
- else
- begin
- storematrix^^[kmat]^^[1] := rows;
- storematrix^^[kmat]^^[2] := cols;
- end;
-
-
- for i := 1 to mrows * ncols do
- begin
- readln(dummyfile, mdline);
- mdresult := eval(mdline);
- if mdline = 'error' then
- begin
- if mfileopen^^[kmat] then
- begin
- close(matfile^^[kmat]^^);
- mfileopen^^[kmat] := false;
- end;
- writeln(mdresult);
- goto 999;
- end;
- readstring(mdresult, y);
- if matrixstoredinfile^^[kmat] then
- write(matfile^^[kmat]^^, y)
- else
- storematrix^^[kmat]^^[i + 2] := y;
- end;
-
- 998:
-
- if matrixstoredinfile^^[kmat] then
- if mfileopen^^[kmat] then
- begin
- close(matfile^^[kmat]^^);
- mfileopen^^[kmat] := false;
- end;
-
- if dummyopen then
- begin
- close(dummyfile);
- dummyopen := false;
- end;
-
- err := GetVol(@name, vRefNum);
- name := dummyfilename;
- err := FSDelete(name, vRefNum);
-
- DisposHandle(handle(matrixelement));
-
- 999:
- end;
-
-
-
- end.